/**
 * @file HoraTrabajo.java
 * @brief Representa las horas de trabajo que tendra un miembro del personal de la clinica.
 * @author Catalina Pelegrin Gonzalez
 * @version 01.00
*/
package GestorClinico;

import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;

import GestorUsuarios.IDException;

public class HoraTrabajo {
	/**
	 * Codigo de identificacion de la hora de trabajo.
	 */
	private int _idHoraTrabajo;
	/**
	 * Hora de inicio donde empieza el intervalo de trabajo de 1 hora.
	 */
	private String _horaInicio;
	/**
	 * Fecha en la que se ha realizado la operacion.
	 */
	private DiaSemana _diaSemana;

	//------------------------------METODOS DE CLASE------------------------------
	
	//????? no se si es un error de dise�o
	/**
	 * @brief Obtiene una HoraTrabajo en funcion de los parametros pasados como argumento.
	 * @param diasemana
	 * @param horainicio
	 * @return HoraTrabajo
	 * @throws ClassNotFoundException, IOException, SQLException, IDException
	 * @throws NoSuchAlgorithmException 
	 */
	public static HoraTrabajo getHoraTrabajo(DiaSemana diasemana, String horainicio) throws SQLException, IOException, ClassNotFoundException, IDException, NoSuchAlgorithmException {
		HoraTrabajo [] hor = HoraTrabajoDAO.getHoraTrabajo(diasemana,horainicio);
		return hor[0];
	}

	public static HoraTrabajo [] getHoraTrabajo() throws SQLException, IOException, ClassNotFoundException, IDException, NoSuchAlgorithmException {
		HoraTrabajo [] hor = HoraTrabajoDAO.getHoraTrabajo();
		return hor;
	}

        public static HoraTrabajo getHoraTrabajo(HoraTrabajo [] horas, DiaSemana diasemana, String horainicio ) {
            if(horas == null)
                return null;

            for(int i=0;i<horas.length;i++) {
                if(horas[i]._diaSemana.equals(diasemana) && horas[i]._horaInicio.equals(horainicio))
                    return horas[i];
            }

            return null;
        }

	/**
	 * @brief Obtiene las HoraTrabajo del identificador del personal de la clinica en el 
	 * dia de la semana indicado.
	 * @param idpersonalclinica
	 * @param diasemana
	 * @return HoraTrabajo []
	 * @throws ClassNotFoundException, IOException, SQLException, IDException
	 */
	public static HoraTrabajo[] getHorasTrabajo(int idpersonalclinica, DiaSemana diasemana) throws SQLException, IOException, ClassNotFoundException , NoSuchAlgorithmException {
		return HoraTrabajoDAO.getHorasTrabajoEmpleado(idpersonalclinica,diasemana);
	}


	/**
	 * @brief Obtiene los id de los miembros del personal de clinica que trabajan en un dia 
	 * de la semana y una hora pasados como parametros.
	 * @param diasemana
	 * @param horainicio
	 * @return HoraTrabajo
	 * @throws ClassNotFoundException, IOException, SQLException, IDException
	 */
	public static Integer[] getPersonalClinica(DiaSemana diasemana, String horainicio) throws SQLException, IOException, ClassNotFoundException , NoSuchAlgorithmException {
		return HoraTrabajoDAO.getEmpleadosHoraTrabajo(diasemana,horainicio);
	}
	
	//--------------- METODOS DE INSTANCIA--------------------------------------------------
	/**
	 * @brief Constructor de la clase
	 * @param idHoraTrabajo Codigo de identificacion de la hora de trabajo.
	 * @param horaInicio Hora de inicio donde empieza el intervalo de trabajo de 1 hora.
	 * @param diaSemana Fecha en la que se ha realizado la operacion.
	 * @throws NoSuchAlgorithmException 
	 */
	public HoraTrabajo (int idHoraTrabajo, String horaInicio, DiaSemana diaSemana) {
		_idHoraTrabajo = idHoraTrabajo;
		_horaInicio = horaInicio;
		_diaSemana = diaSemana;
	}
	
	/**
	 * @brief Obtiene id de la hora de trabajo.
	 * @return Codigo de identificacion de la hora de trabajo.
	 */
	public int getIdHoraTrabajo(){
		return _idHoraTrabajo;
	}
	
	/**
	 * @brief Asigna id de la hora de trabajo
	 * @param idHoraTrabajo Codigo de identificacion de la hora de trabajo.
	 */
	public void setIdHoraTrabajo(int idHoraTrabajo){
		_idHoraTrabajo=idHoraTrabajo;
	}
	
	/**
	 * @brief Obtiene dia de la semana de la hora de trabajo.
	 * @return Fecha en la que se ha realizado la operacion.
	 */
	public DiaSemana getDiaSemana(){
		return _diaSemana;
	}
	
	/**
	 * @brief Asigna dia de la semana de la hora de trabajo.
	 * @param diaSemana Fecha en la que se ha realizado la operacion.
	 */
	public void setDiaSemana(DiaSemana diaSemana){
		_diaSemana=diaSemana;
	}
	
	/**
	 * @brief Obtiene la hora de inicio de la hora de trabajo.
	 * @return Hora de inicio donde empieza el intervalo de trabajo de 1 hora.
	 */
	public String getHoraInicio(){
		return _horaInicio;
	}
	
	/**
	 * @brief Obtiene la hora de inicio de la hora de trabajo.
	 * @return Hora de inicio donde empieza el intervalo de trabajo de 1 hora.
	 */
	public void setHoraInicio(String horaInicio){
		_horaInicio=horaInicio;
	}

}
